go语言web开发系列之二十二:用signintech/gopdf库生成带有图片和表格的pdf

您所在的位置:网站首页 gorm 生成表单 go语言web开发系列之二十二:用signintech/gopdf库生成带有图片和表格的pdf

go语言web开发系列之二十二:用signintech/gopdf库生成带有图片和表格的pdf

2023-08-22 05:42| 来源: 网络整理| 查看: 265

一,安装需要用到的库:

1,gopdf库的地址:

GitHub - signintech/gopdf: A simple library for generating PDF written in Go lang

2,gopdf库安装的命令:

liuhongdi@ku:~$ go get -u github.com/signintech/gopdf

3,gorm库的官网地址:

GORM - The fantastic ORM library for Golang, aims to be developer friendly.

4,gorm库安装:

liuhongdi@ku:~$ go get -u gorm.io/gorm

说明:刘宏缔的go森林是一个专注golang的博客, 网站:https://blog.imgtouch.com 原文: go语言web开发系列之二十二:用signintech/gopdf库生成带有图片和表格的pdf – 架构森林

说明:作者:刘宏缔 邮箱: [email protected]

二,演示项目的相关信息

1,地址:

GitHub - liuhongdi/digv22: 用signintech/gopdf库生成带有图片和表格的pdf

2,功能说明:

           演示了生成和下载pdf,及在pdf中加入图片和表格

3,项目结构:如图:

三,用到的sql

1,建表sql

CREATE TABLE `goods` ( `goodsId` int NOT NULL AUTO_INCREMENT COMMENT 'id', `goodsName` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '商品名称', `subject` varchar(200) NOT NULL DEFAULT '' COMMENT '标题', `price` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '价格', `stock` int NOT NULL DEFAULT '0' COMMENT '库存数量', PRIMARY KEY (`goodsId`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品表'

2,插入演示数据:

INSERT INTO `goods` (`goodsId`, `goodsName`, `subject`, `price`, `stock`) VALUES (1, '蜂蜜牛奶手工皂', '深入滋养,肌肤细腻嫩滑', '70.00', 100), (2, '紫光筷子筒', '紫光智护,干爽防潮更健康', '189.00', 40), (3, '野性mini便携式蓝牙音箱', '强悍机能,品味豪迈', '499.00', 100), (4, '乐穿梭茶具', '茶具+茶叶精美端午礼盒', '200.00', 40); 四,go代码说明

1,controller/fileController.go

package controller import ( "fmt" "github.com/gin-gonic/gin" "github.com/liuhongdi/digv22/service" "github.com/signintech/gopdf" "log" "strconv" ) type FileController struct{} func NewFileController() FileController { return FileController{} } //生成一个pdf文件 func (g FileController) GetOne(c *gin.Context) { //创建pdf pdf := gopdf.GoPdf{} pdf.Start(gopdf.Config{ PageSize: *gopdf.PageSizeA4 }) pdf.AddPage() //设置font err := pdf.AddTTFFont("wts11", "/data/temp/PingFang_Regular.ttf") if err != nil { log.Print(err.Error()) return } err = pdf.SetFont("wts11", "", 14) if err != nil { log.Print(err.Error()) return } pdf.SetTextColor(0x00,0x00,0xff) //添加text内容 pdf.SetX(288) pdf.SetY(20) pdf.Cell(nil, "您好") //添加图片 pdf.Image("/data/liuhongdi/digv22/static/1200.jpeg", 47, 50, &gopdf.Rect{W: 500, H: 300}) //print image //添加表格的标题 pdf.SetX(47) pdf.SetY(370) alignOption := gopdf.CellOption{Align: gopdf.Center | gopdf.Middle, Border: gopdf.Left | gopdf.Right | gopdf.Bottom | gopdf.Top,}; pdf.CellWithOption(&gopdf.Rect{ W: 500, H: 50, }, "旗舰店12月入库商品列表", alignOption) //设置表格表头的字体 err = pdf.SetFont("wts11", "", 10) pdf.SetTextColor(0xa8,0xa8,0xa8) if err != nil { log.Print(err.Error()) return } //生成表格的表头 pdf.SetX(47) pdf.SetY(420) pdf.CellWithOption(&gopdf.Rect{ W: 50, H: 40, }, "商品ID", alignOption) pdf.SetX(97) pdf.SetY(420) pdf.CellWithOption(&gopdf.Rect{ W: 400, H: 40, }, "商品名称", alignOption) pdf.SetX(497) pdf.SetY(420) pdf.CellWithOption(&gopdf.Rect{ W: 50, H: 40, }, "商品库存", alignOption) //生成表格的内容 pdf.SetTextColor(0x00,0x00,0x00) alignLeft := gopdf.CellOption{Align: gopdf.Left | gopdf.Middle, Border: gopdf.Left | gopdf.Right | gopdf.Bottom | gopdf.Top,}; //查询数据库,用表格显示数据 //得到商品列表 goods,err := service.GetGoodsList() //遍历商品 for i,v := range goods { curY := 460+i*40 pdf.SetX(47) pdf.SetY(float64(curY)) pdf.CellWithOption(&gopdf.Rect{ W: 50, H: 40, }, " "+strconv.FormatInt(v.GoodsId,10), alignLeft) pdf.SetX(97) pdf.SetY(float64(curY)) pdf.CellWithOption(&gopdf.Rect{ W: 400, H: 40, }, " "+v.GoodsName, alignLeft) pdf.SetX(497) pdf.SetY(float64(curY)) pdf.CellWithOption(&gopdf.Rect{ W: 50, H: 40, }, " "+string(v.Stock), alignLeft) } //save to file pdf.WritePdf("/data/temp/hello.pdf") return } //生成一个pdf文件并下载 func (g FileController) DownOne(c *gin.Context) { filepath:="/data/temp/hello.pdf" filename:="hello.pdf" c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", filename))//fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名 c.Writer.Header().Add("Content-Type", "text/pdf") c.File(filepath) return }

2,service/goods.go

package service import ( "github.com/liuhongdi/digv22/dao" "github.com/liuhongdi/digv22/model" ) //得到多件商品返回 func GetGoodsList() ([]*model.Goods,error) { goods, err := dao.SelectAllGoods() return goods,err }

3,dao/goods.go

package dao import ( "github.com/liuhongdi/digv22/global" "github.com/liuhongdi/digv22/model" ) func SelectAllGoods() ([]*model.Goods, error) { var goods []*model.Goods global.DBLink.Find(&goods) return goods, nil }

4,model/goods.go

package model type Goods struct { GoodsId int64 `gorm:"column:goodsId",json:"goodsid"` // 自增 GoodsName string `gorm:"column:goodsName",json:"goodsname"` // Subject string `gorm:"column:subject",json:"subject"` Price string `gorm:"column:price",json:"price"` Stock string `gorm:"column:stock",json:"stock"` } func (Goods) TableName() string { return "goods" }

5,其他相关代码可访问github查看

五,测试效果

1,测试生成pdf,

访问:

http://127.0.0.1:8080/file/getone

2,测试下载

访问:

http://127.0.0.1:8080/file/downone

下载完成后打开查看:

六,查看库的版本: module github.com/liuhongdi/digv22 go 1.15 require ( github.com/gin-gonic/gin v1.6.3 gorm.io/driver/mysql v1.0.1 gorm.io/gorm v1.20.6 github.com/signintech/gopdf v0.9.13 )



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3